Описание агента
Функциональные особенности агента
- Возможность настройки работы агента при помощи конфигурационного файла;
- Встроенный планировщик, позволяющий настраивать расписание загрузки фидов;
- Трансформация и фильтрация полученных данных;
- Поддержка различных форматов вывода данных (CSV, TXT, Kafka);
- Возможность интеграций с СЗИ;
- Возможность настройки способа получения данных:
- Полная выгрузка всех данных при каждой загрузке.
- Загрузка только изменений с предыдущего обновления для экономии ресурсов и оперативного получения новых фидов.
Компоненты агента
Агент состоит из четырех основных сущностей:
- input (источник данных, generator) - запрашивает данные из облака;
- transform (преобразователь данных, map) - фильтрует поток данных по заданному условию или преобразует в требуемый формат;
- sink (потребитель данных) - сохраняет преобразованный поток в необходимом формате, например, в файл;
- service (сервис интеграции) – загружает результаты работы агента в СЗИ.
Генераторы
Все входные компоненты (inputs) агента наследуются от базового класса AgentGenerator, который позволяет настроить работу компонента по расписанию (cron) и сохранять состояние работы в SQLite. Среди них реализованы следующие компоненты:
- IndicatorsGenerator - получение коллекций индикаторов из TI Feeds;
- FeedStreamGenerator - получение индикаторов конкретного фида из TI Feeds;
- FeedsGenerator - получение индикаторов из фидов TI Feeds;
- DomainCategoriesGenerator - получение категорий доменов TI Feeds.
Фильтры
Компоненты типа transform выполняют преобразование и фильтрацию входных данных по условиям на основе их свойств. Среди них реализованы следующие компоненты:
- IndicatorsFilter - фильтрует поток входящих индикаторов по условию, заданному в формате expr-lang;
- DomainCategoriesFilter - фильтрует поток входящих категорий доменов по условию, заданному в формате expr-lang.
Мапперы
Компоненты типа transform, выполняют преобразование входных данных в выходной формат «ключ-значение». Среди них реализованы следующие компоненты:
- IndicatorsTextMap - преобразует входной поток индикаторов в данные необходимого формата с возможностью преобразования результата с помощью выражений в формате expr-lang, и его расширений на агенте;
- DomainCategoriesTextMap - преобразует входной поток категорий доменов в данные необходимого формата с возможностью преобразования результата с помощью выражений в формате expr-lang, и его расширений на агенте.
Потребители данных
Компоненты типа sink, выполняет передачу данных в необходимом выходном формате, например, сохранение в файл или передача данных во внешнюю систему. Среди них реализованы следующие компоненты:
- IndicatorsTextSink - сохраняет поток предварительно обработанных индикаторов в CSV или TXT файл;
- DomainsTextSink - сохраняет поток предварительно обработанных категорий доменов в CSV или TXT файл;
- TicKafkaSink – записывает данные в Apache Kafka;
- TelemetrySink – отправляет данные в телеметрию TI Feeds.
Сервисы интеграции
Сервисы интеграции – это встроенные в sink компоненты, реализующие логику интеграции агента с внешними системами, передающие результаты работы sink во внешнюю систему. Все сервисы имеют базовую конфигурацию для подключения к интегрируемому серверу по его адресу, порту и требуемому типу аутентификации (basic, bearer, token) с возможностью настройки протокола общения (HTTP/HTTPS) и возможностью отключения проверки SSL-сертификата. Реализованы сервисы интеграции со следующими системами:
- Kaspersky Cybertrace
- PT NAD
- MISP
- RuSIEM
- Usergate NGFW
Остальные интеграции реализованы через загрузку файла, сформированного агентом. Загрузка этого файла осуществляется средствами внешней системы или напрямую, без использования агента.
Взаимодействие компонентов
В конфигурационном файле агента из перечисленных выше компонентов формируется один или несколько потоков выполнения программы, которые представляют собой отдельные pipeline.
В каждом конфигурируемом pipeline компоненты обязательно должны быть связаны в следующем порядке:
Input -> Filter (Transform) -> Map (Transform) -> Sink + Service
- Input (Generator) всегда является началом любого pipeline, источником данных для обработки;
- Filter является опциональным, но может находится только перед Map. Filter и Map являются подвидом Transform, поэтому с точки зрения объявления в конфигурационном файле они идентичны;
- Sink всегда завершает pipeline, а опционально встроенный в него Service использует результаты работы pipeline.
Структура pipeline не обязательно должна быть линейной: несколько разных генераторов могут передавать данные в одну и ту же map, или из одной map данные могут дублироваться в разные sink.
При сохранении результатов работы в файл рекомендуется использовать линейную структуру pipeline из-за потенциальных проблем с синхронизацией сохранения текущего состояния, вызванных асинхронной природой работы агента. Эта проблема особенно актуальна для режима получения обновлений, где сохранение состояния играет решающую роль.
В таких случаях рекомендуется для каждого sink создавать отдельный pipeline с соотношением количества генераторов и sink 1:1.